package com.ophiux.utils.common;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class HanyuPinyinHelper {
	/** 
      * 将文字转为汉语拼音
      * @param chineselanguage 要转成拼音的中文
      */
     public String toHanyuPinyin(String ChineseLanguage){
         char[] cl_chars = ChineseLanguage.trim().toCharArray();
         String hanyupinyin = "";
         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部小写
         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
         defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V) ;
         try {
             for (int i=0; i<cl_chars.length; i++){
                if (String.valueOf(cl_chars[i]).matches("[\u4e00-\u9fa5]+")){// 如果字符是中文,则将中文转为汉语拼音
                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0];
                 } else {// 如果字符不是中文,则不转换
                     hanyupinyin += cl_chars[i];
                 }
             }
         } catch (BadHanyuPinyinOutputFormatCombination e) {
             System.out.println("字符不能转成汉语拼音");
         }
         return hanyupinyin;
     }
     
     public static String getFirstLettersUp(String ChineseLanguage){
         return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.UPPERCASE);
     }
     
    public static String getFirstLettersLo(String ChineseLanguage){
         return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.LOWERCASE);
     }
     
     public static String getFirstLetters(String ChineseLanguage,HanyuPinyinCaseType caseType) {
         char[] cl_chars = ChineseLanguage.trim().toCharArray();
         String hanyupinyin = "";
         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
         defaultFormat.setCaseType(caseType);// 输出拼音全部大写
         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
         try {
             for (int i = 0; i < cl_chars.length; i++) {
                 String str = String.valueOf(cl_chars[i]);
                if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1);
                 } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
                     hanyupinyin += cl_chars[i];
                 } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
                     hanyupinyin += cl_chars[i];
                 } else {// 否则不转换
                     hanyupinyin += cl_chars[i];//如果是标点符号的话，带着
                 }
             }
         } catch (BadHanyuPinyinOutputFormatCombination e) {
             System.out.println("字符不能转成汉语拼音");
         }
         return hanyupinyin;
     }
     
     public static String getPinyinString(String ChineseLanguage){
         char[] cl_chars = ChineseLanguage.trim().toCharArray();
         String hanyupinyin = "";
         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部大写
         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
         try {
             for (int i = 0; i < cl_chars.length; i++) {
                 String str = String.valueOf(cl_chars[i]);
                 if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(
                             cl_chars[i], defaultFormat)[0];
                 } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
                     hanyupinyin += cl_chars[i];
                 } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
 
                     hanyupinyin += cl_chars[i];
                 } else {// 否则不转换
                 }
             }
         } catch (BadHanyuPinyinOutputFormatCombination e) {
             System.out.println("字符不能转成汉语拼音");
         }
         return hanyupinyin;
     }
     /**
      * 取第一个汉字的第一个字符
     * @Title: getFirstLetter 
     * @Description: TODO 
     * @return String   
     * @throws
      */
     public static String getFirstLetter(String ChineseLanguage){
         char[] cl_chars = ChineseLanguage.trim().toCharArray();
         String hanyupinyin = "";
         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
         defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 输出拼音全部大写
         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
         try {
             String str = String.valueOf(cl_chars[0]);
             if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
                 hanyupinyin = PinyinHelper.toHanyuPinyinStringArray(
                 cl_chars[0], defaultFormat)[0].substring(0, 1);;
             } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
                 hanyupinyin += cl_chars[0];
             } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
 
                 hanyupinyin += cl_chars[0];
             } else {// 否则不转换
 
             }
         } catch (BadHanyuPinyinOutputFormatCombination e) {
             System.out.println("字符不能转成汉语拼音");
         }
         return hanyupinyin;
     }
     
     public static void main(String[] args) {
         HanyuPinyinHelper hanyuPinyinHelper = new HanyuPinyinHelper() ;
        System.out.println(HanyuPinyinHelper.getFirstLettersLo("啊aA不bB吃cC对dD额eE发fF个gG好hH就jJ看kK来lL吗mM你nN欧oO怕pP去qQ人rR是sS他tT我wW下xX有yY在zZ"));
   }
}
